/***
 * js作用域
 * js采用静态作用域
 * https://github.com/mqyqingfeng/Blog/issues/3
 */


var value = 1;

function foo() {
  console.log(value)
}


function bar() {
  var value = 2;
  foo();
}

// 执行 foo 函数，先从 foo 函数内部查找是否有局部变量 value，如果没有，就根据书写的位置，查找上面一层的代码，也就是 value 等于 1，所以结果会打印 1。
bar(); // 1


var scope = "global scope";
function checkscope1(){
  var scope = "local scope";
  function f(){
    console.log(scope);
    return scope;
  }
  return f();
}
checkscope1(); // local scope

var scope = "global scope";
function checkscope2(){
  var scope = "local scope";
  function f(){
    console.log(scope);
    return scope;
  }
  return f;
}
checkscope2()(); // local scope

// checkscope执行结果相同，函数的作用域基于函数创建的位置

var x = 21;

var talk = function () {

  console.log(x);

  var x = 20;

};

/**
 * 变量提升
 * console.log(x); var x = 20 ===> var x; console.log(x); x= 20;
 */
talk (); // undefined